package edu.csl.study.scala.basic.demo

/**
 * JAVA与Scale类型转换对比
 * （1）JavaScala判断对象是否是C类型obj
 *     instanceof C       obj.isInstanceof[C]
 * （2）将对象强转成C类型
 *     (C ) obj            obj.asInstanceof[C]
 * （3）获取类型为T的class对象
 *     C.class             classOf[C]
 *
 *  Scale关键字：private/protected  没有public关键字（默认就是public）
 *  private[this]修饰符
 *  protected[this]修饰符
 *
 */
class ExtendsDemo {



}
object ExtendsDemo{

  def main(args: Array[String]): Unit = {
      val student3 = new Student3
      println(student3.name)
      println(student3.getName)
      // 判断s1是否为Student3类型
      if(student3.isInstanceOf[Student3]) {
         // 将s1转换为Student3类型
         val s2 =  student3.asInstanceOf[Student3]
         println(s2)
      }


    val student4:Person3= new Student3

    // 判断s1是否为Student3类型
    if(student4.isInstanceOf[Student3]) {
      // 将s1转换为Student3类型
      val s2 =  student4.asInstanceOf[Student3]
      println(s2)
    }
    // 判断s1是否为Person3类型
    if(student4.isInstanceOf[Person3]) {
      // 将s1转换为Student3类型
      val s2 =  student4.asInstanceOf[Person3]
      println(s2)
    }
  }

}

class Person3 {


  protected[this] val name = "super"

  def getName = name
}

class Student3 extends Person3 {
  // 重写val字段
   override val name:String = "234"

  // 重写getName方法
   override def getName:String = "hello, " + super.getName


}